const compose=require('koa-compose')

const middleware=[]

function use(fn){
    middleware.push(fn)
}

use(async function(ctx,next){
    console.log("1111")
    setTimeout(()=>{
        console.log("timeout 1111")
    },1000)
    // 执行next 才在compose 中执行下一个中间件
    // 如果没有next 则不会执行下一个中间件，到此结束
    await next()
    console.log("end 1111")
})

use(async function(ctx,next){
    console.log("2222")
    await next()
    console.log("end 2222")
})

const run=compose(middleware)
// ƒ (context, next) {} 类型的函数
console.log(run)

// 当函数执行时，会依次执行中间件函数，当执行next 函数时
// 会依次调用dispatch i+1
// 因此假如一个中间件中没有next() ，那么下面的中间件
// 不会执行
run("context",function(){
    console.log("end")
})